package ${classInfo.packageName}.openapi.mapper;

import com.atinbo.model.Pageable;
import ${classInfo.packageName}.model.${classInfo.className}DTO;
import ${classInfo.packageName}.model.${classInfo.className}Param;
import ${classInfo.packageName}.model.${classInfo.className}Query;
import ${classInfo.packageName}.openapi.model.${classInfo.className}VO;
import ${classInfo.packageName}.openapi.model.${classInfo.className}Form;
import ${classInfo.packageName}.openapi.model.${classInfo.className}QueryForm;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

import java.util.List;

/**
 * ${classInfo.classComment}.
 *
 * @author ${classInfo.author}
 * @date ${.now?string('yyyy-MM-dd HH:mm:ss')}
 */
@Mapper
public interface ${classInfo.className}Mapper {

    ${classInfo.className}Mapper INSTANCE = Mappers.getMapper(${classInfo.className}Mapper.class);

    /**
     * form to param
     *
     * @param ${classInfo.className?uncap_first}Form ${classInfo.className?uncap_first}Form
     * @return ${classInfo.className}Param
     */
    ${classInfo.className}Param to${classInfo.className}Param(${classInfo.className}Form ${classInfo.className?uncap_first}Form);

    /**
     * QueryForm to Query
     *
     * @param ${classInfo.className?uncap_first}QueryForm ${classInfo.className?uncap_first}QueryForm
     * @return ${classInfo.className}Param
     */
    ${classInfo.className}Query to${classInfo.className}Param(${classInfo.className}QueryForm ${classInfo.className?uncap_first}QueryForm);

    /**
     * DTO to VO
     *
     * @param ${classInfo.className?uncap_first} ${classInfo.className?uncap_first}
     * @return ${classInfo.className}VO
     */
    ${classInfo.className}VO to${classInfo.className}Vo(${classInfo.className}DTO ${classInfo.className?uncap_first});

    /**
     * DTOList to VOList
     *
     * @param ${classInfo.className?uncap_first}List ${classInfo.className?uncap_first}List
     * @return ${classInfo.className}VO
     */
    List<${classInfo.className}VO> to${classInfo.className}Vos(List<${classInfo.className}DTO> ${classInfo.className?uncap_first}List);

    /**
     * DTOPage to VOPage
     *
     * @param ${classInfo.className?uncap_first}List ${classInfo.className?uncap_first}List
     * @return ${classInfo.className}VO
     */
    Pageable<${classInfo.className}VO> to${classInfo.className}Vos(Pageable<${classInfo.className}DTO> ${classInfo.className?uncap_first}List);
}
